<?php
require_once 'constants.php';
require_once 'model.php';
require_once 'view.php';
require_once '../core/app_global_metods.php';

function handler(){
    #define evento default
    $event=VIEW_GET_USER;
    #obtiene la url de la solicitud
    $uri=$_SERVER['REQUEST_URI'];
    #guarda en un array las posibles peticiones q debera manejar el handler
    $peticiones=  array(LOGD_USER,SET_USER,GET_USER,DELETE_USER,EDIT_USER
                        ,VIEW_LOG_USER,VIEW_GET_USER,VIEW_SET_USER,
                        VIEW_DELETE_USER,VIEW_EDIT_USER,VIEW_LIST_USER);
    #evalua la peticion recibida
    foreach ($peticiones as $peticion){
        #crea la url de la peticion 
        $uri_peticion=MODULO.$peticion;
        #busca la uri generada en la uri del servidor
        if(strpos($uri,$uri_peticion)!==false){
            $event=$peticion;
        }
    }
    
    #llama a helper_user_data que obtiene los datos existentes del usuario y
    # los coloca en un array
    $submit_data=helper_user_data();
    #inicializa el objeto usuario
    $usuario=set_obj();
    
    switch ($event) {
        case LOGD_USER:
            if(array_key_exists('sAcceso',$submit_data))
                {   #verifica si existe usuario (llamado a modelo)
                    $usuario->get_exist_user($submit_data);
                    #asigna los datos q se enviaran a al vista
                    switch($usuario->status)
                    {
                        case 0://no existe
                            $data=array('mensaje'=>$usuario->msj,
                                    'tbx_sacceso'=>$submit_data['sAcceso']);
                            return_view(VIEW_LOG_USER,$data);
                        break;
                        case 1://existe
                            $usuario->update_access();
                            if($usuario->bAdministrador==true){
                            $data_users=$usuario->get_list_users();
                            $data=array('resultset'=>$data_users,
                                        'data'=>array('mensaje'=>''));
                            start_session($submit_data['sAcceso'],1);
                            return_view(VIEW_LIST_USER,$data);}
                            else{
                                start_session($submit_data['sAcceso']);
                                header('Location: /STControlEquipo/articulo/enlist');
                            }
                        break;
                        case 2://campo password vacio
                            $data=array('mensaje'=>$usuario->msj,
                                    'tbx_sacceso'=>$submit_data['sAcceso']);
                            return_view(VIEW_LOG_USER,$data);
                        break;
                     }
               }
               else{
                   
                   //verificar si es logout
                   if(array_key_exists('logout',$_GET)){
                       etiqueta:
                       finalize_session();
                       $data=array('mensaje'=>'Ingrese Datos de Acceso');
                       if(array_key_exists('error',$_GET))
                               $data=array('mensaje'=>$submit_data['mensaje2']);
                       return_view(VIEW_LOG_USER,$data);}
                       
                   else{
                       if(start_session()){
                           if($_SESSION['Registered']==1){
                               $data_users=$usuario->get_list_users();
                               $data=array('resultset'=>$data_users,
                                            'data'=>array('mensaje'=>''));
                               return_view(VIEW_LIST_USER,$data);
                              }
                       //de lo contrario redireccionar
                            else{
                              finalize_session();
                           header('Location: /STControlEquipo/articulo/enlist');
                            }
                       }
                      else{
                           goto etiqueta;
                       }
                  
               }
            }

        break;
        case GET_USER:
            checklog(true);
            $usuario->get($submit_data['nIdUsuario']);
            $data=array('nIdUsuario'=>$submit_data['nIdUsuario'],
                        'sAcceso'=>$usuario->sAcceso,
                        'sPassword'=>'',
                        'bAdministrador'=>$usuario->bAdministrador,
                        'bActivo'=>$usuario->bActivo,
                        'dUltimoAcceso'=> $usuario->dUltimoAcceso
                        );
            return_view(VIEW_EDIT_USER,$data);
        break;
        case EDIT_USER:
            checklog(true);//verifica si el usuario es administrador y tiene permiso
            $usuario->edit($submit_data);
            $data_users=$usuario->get_list_users();
            $data=array('resultset'=>$data_users,
                        'data'=>array('mensaje'=>$usuario->msj));
            return_view(VIEW_LIST_USER,$data);
            break;
        case VIEW_SET_USER:
            start_session();
            checklog(true);
            $data=array('mensaje'=>'Ingrese los datos');
            return_view(VIEW_SET_USER,$data);
            break;
        case SET_USER:
            start_session();
            checklog(true);
            $usuario->set($submit_data);
            $data_users=$usuario->get_list_users();
            $data=array('resultset'=>$data_users,
                        'data'=>array('mensaje'=>$usuario->msj));
            return_view(VIEW_LIST_USER,$data);
            break;
        default:
            break;
    }
}

function set_obj(){
    $obj=new Usuario();
    return $obj;
}

#obtiene los datos externos
function helper_user_data(){
    $helper_data=array();
    #default values
    $helper_data['loged']=false;
    #default values
    if($_POST){
        if(array_key_exists('tbx_sacceso',$_POST)){
            $helper_data['sAcceso']=$_POST['tbx_sacceso'];
        }
        if(array_key_exists('tbx_spassword',$_POST)){
            $helper_data['sPassword']=$_POST['tbx_spassword'];
        }
        if(isset($_POST['chbx_badministrador'])){
            $helper_data['bAdministrador']=1;
        }
        else $helper_data['bAdministrador']=0;
        
        if(isset($_POST['chbx_bactivo'])){
            $helper_data['bActivo']=1;
        }
        else $helper_data['bActivo']=0;
        
        if(array_key_exists('rad_nidusuario',$_POST)){
            $helper_data['nIdUsuario']=$_POST['rad_nidusuario'];
        }
        if(array_key_exists('tbx_nidusuario',$_POST)){
            $helper_data['nIdUsuario']=$_POST['tbx_nidusuario'];
        }
        
    }
    if($_GET){
        if(array_key_exists('error',$_GET)){
            $helper_data['mensaje2']="Error de permisos,reingrese";
        }
        if(array_key_exists('logout',$_GET)){
            $helper_data['logout']=true;
        }
    }
    
    
    
    return $helper_data;
}

function checklog($isadmin){
    if(!isset($_SESSION)) {session_start();}
    if($isadmin){
        if(isset($_SESSION)){
            if($_SESSION['Registered']==1){
                return true;
            }
        }
        else{
            header('Location: /STControlEquipo/usuario/log/?error=2');
        }
    }
    else{
        if(isset($_SESSION))
            return  true;
        else{
            header('Location: /STControlEquipo/usuario/log/');
        }
    }
 
}
handler();
?>
